﻿<?php

class ProductController extends ControllerBase
{
	/**
	 * Initialisiert den Controller
	 */
	public function Init()
	{
		$this->SetAuthRequired(true);
	}

	/**
	 * Haupteinstiegspunkt eines jeden Controllers
	 * @return ViewResponse gibt das Response Objekt für die Ausgabe zurück
	 */
	public function Index()
	{
		$res = new ViewResponse();
		
		$dao = new DAO_Kategorie();
		
		$this->Kategorien = $dao->Laden();
		
		if (count($this->Kategorien) > 0)
			$res->view = $this->View("produkt_index", "Hello World");
		else
			$res->view = $this->View("no_data", "Es sind keine Kategorien angelegt, es muss zumindest eine Kategorie angelegt werden um Produkte anzulegen.");
			
		return $res;
	}
	
	/**
	 * Verarbeitet die Detailansicht für ein Produkt
	 * @return ViewResponse gibt das Response Objekt für die Ausgabe zurück
	 */
	public function Detail()
	{
		$res = new ViewResponse();
		if (!isset($_REQUEST["p_id"]) || $_REQUEST["p_id"] < 0)
		{
			$res->error = "Fehler beim aufruf der Aktion.";
			return $res;
		}
		
		// DAO instanziieren
		$katdao = new DAO_Kategorie();
		$prodDao = new DAO_Produkt();
		$bildDao = new DAO_Bilder();
		
		$this->Bilder = array();
		
		if ($_REQUEST["p_id"] > 0)
		{
			// Produkt laden
			$this->Produkt = $prodDao->ProduktLaden($_REQUEST["p_id"]);
			// Bilder laden
			$this->Bilder = $bildDao->LadeBilderfuerProdukt($_REQUEST["p_id"]);
		}
		else
		{
			// Neues Produkt erstellen
			$this->Produkt = new Produkt();
		}
		
		// Kategorien aus Datenbank laden
		$this->Kategorien = $katdao->Laden();
		
		if ($this->Produkt != null)
		{
			$res->view = $this->View("produkt_detail");
		}
		else
		{
			$res->view = $this->View("no_data", "Produkt wurde nicht gefunden.");
		}
		
		return $res;
	}
	
	/**
	 * Gibt alle Produkte für die angeforderte Kategorie zurück
	 * benötigt den Request Parameter 'kid' in der die ID für die Kategorie übergeben wird.
	 * Optional kann 'prod_name' angefordert werden um nach einem bestimmten Produkt in der Kategorie zu suchen.
	 * @return ViewResponse gibt das Response Objekt für die Ausgabe zurück
	 */
	public function GetProducts()
	{
		$res = new ViewResponse();
		if (!isset($_REQUEST["kid"]) || $_REQUEST["kid"] < 1)
		{
			$res->error = "Fehler beim aufruf der Aktion.";
			return $res;
		}
		
		// DAO instanziieren
		$dao = new DAO_Produkt();
		
		if (isset($_REQUEST["prod_name"]) && !empty($_REQUEST["prod_name"]))
		{
			$this->Produkts = $dao->FindByName($_REQUEST["kid"], $_REQUEST["prod_name"]);
		}
		else
		{
			// Produkte der Kategorie laden
			$this->Produkts = $dao->LadeProduktefuerKategorie($_REQUEST["kid"]);
		}
		
		if (count($this->Produkts) > 0)
			$res->view = $this->View("produkt_list");
		else
			$res->view = $this->View("no_data", "Keine Produkte vorhanden.");
		
		return $res;
	}

	// Speichert das Produkt
	public function SaveProduct()
	{
		$res = new ViewResponse();
		
		try
		{
			$prod = Produkt::CreateFromRequest();
			$dao = new DAO_Produkt();
			$prodId = $dao->Speichern($prod);
			
			if ($dao->HasErrors())
				$res->error = join("<br/>", $dao->GetErrors());
			else
				$res->data["id"] = $prodId;
		}
		catch (Exception $ex)
		{
			$res->error = "Fehler beim Speichern des Produktes";
		}
			
		
		return $res;
	}
	
	// Entfernt das Produkt
	public function DeleteProdukt()
	{
		$res = new ViewResponse();
		
		if (!isset($_REQUEST["p_id"]) || $_REQUEST["p_id"] < 0)
		{
			$res->error = "Fehler beim aufruf der Aktion.";
			return $res;
		}
		
		try
		{
			$dao = new DAO_Produkt();
			$prodId = $dao->Entfernen($_REQUEST["p_id"]);
		}
		catch (Exception $ex)
		{
			$res->error = "Fehler beim Speichern des Produktes";
		}
			
		
		return $res;
	}
	
	// Fügt dem Produkt ein Bild hinzu
	public function AddPicture()
	{
		$res = new ViewResponse();
	
		if (!isset($_REQUEST["p_id"]) || $_REQUEST["p_id"] < 0)
			$res->error = "Fehler beim aufruf der Aktion.";
		
		if ($_FILES["p_source"]["error"] != UPLOAD_ERR_OK)
			$res->error .= $_FILES["p_source"]["error"];
		
		if (!empty($res->error))
			return $res;
		
		$bild = Bild::CreateFromRequest();
		$bild->Source = $_FILES["p_source"]["name"];
		
		$tmpName = $_FILES["p_source"]["tmp_name"];
		$filePath = "./Bilder/ProduktBilder/";
		if (!file_exists($filePath))
			mkdir($filePath);
			
		if (file_exists($filePath . $bild->Source))
		{
			$res->error = "Es existiert bereits eine Datei mit diesem Namen.";
			return $res;
		}
		
		move_uploaded_file($tmpName, $filePath . $bild->Source);
		
		$dao = new DAO_Bilder();
		$dao->Speichern($bild);
		
		$this->RedirectTo("Product", "Index", array("p_id" => $_REQUEST["p_id"]));
	}
}

?>